/**
 * Sumpu Inc.
 * Copyright (c) 2011-2012 All Rights Reserved. 
 */
package cn.sumpu.app.guoguojie.biz.impl.top;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import cn.sumpu.app.guoguojie.biz.TopBiz;

import com.taobao.api.internal.stream.message.TopCometMessageListener;

/**
 * @author nick
 * @version $Id: MessageListener.java, v 0.1 2012-8-13 上午11:40:20 nick Exp $
 */
public class MessageListener implements TopCometMessageListener {

    private final static Logger logger = LoggerFactory.getLogger(MessageListener.class);

    @Autowired
    private TopBiz              topBiz;

    // 接收消息
    public void onReceiveMsg(String message) {
        topBiz.refreshProduct(message);
        if (logger.isDebugEnabled()) {
            logger.debug("收到一条消息，消息体是：" + message + "<br/>");
        }
    }

    public void onConnectReachMaxTime() {
        if (logger.isWarnEnabled()) {
            logger.warn("<font color=\"#FF0000\">连接到达最大时间，断开连接</font><br/>");
        }
    }

    // 处理服务端有丢弃消息的情况
    public void onDiscardMsg(String message) {
        if (logger.isDebugEnabled()) {
            logger.debug("收到一条服务器端丢弃的消息，消息体是：" + message + "<br/>");
        }
    }

    public void onServerUpgrade(String message) {

    }

    public void onServerRehash() {
    }

    // 服务端踢出，此时应该告警，说明客户端处理接受不过来消息了，服务端堆积了很多消息。
    //TODO 服务端开始堆积消息了，需要监控
    public void onServerKickOff() {
        if (logger.isWarnEnabled()) {
            logger.warn("<font color=\"#FF0000\">由于客户端处理太慢了，导致服务端消息堆积太多，服务端主动断开了客户端的连接，sdk断开连接</font><br/>");
        }
    }

    //TODO 有异常消息产生，需要监控
    public void onOtherMsg(String message) {
        if (logger.isWarnEnabled()) {
            logger.warn("<font color=\"#FF0000\">异常消息产生，需要监控消息体是：" + message + "</font><br/>");
        }
    }

    //TODO 发生未知异常，需要监控
    public void onException(Exception ex) {
        if (logger.isErrorEnabled()) {
            logger.error("<font color=\"#FF0000\">发生未知异常，需要监控，异常信息是：" + ex.getMessage() + "</font><br/>");
        }
    }

    public void onConnectMsg(String message) {
        if (logger.isDebugEnabled()) {
            logger.debug("连接到服务端：" + message + "<br/>");
        }
    }

    public void onHeartBeat() {
        if (logger.isDebugEnabled()) {
            logger.debug("<font color=\"#FF0000\">用户没有产生任何数据，服务端发送了一个心跳数据，为了保持连接不被网络设备断开</font><br/>");
        }
    }

    // 这种情况说明两个客户端使用的连接id是一样的,应该监控起来
    //TODO 两个客户端踢需要监控起来
    public void onClientKickOff() {
        if (logger.isWarnEnabled()) {
            logger.warn("<font color=\"#FF0000\">有另外一个客户端使用了相同的appkey发起长连接请求，所以这个客户端断开了，长连接停止工作</font><br/>");
        }
    }
}
